package speelotheek.models;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import speelotheek.components.Database;
import speelotheek.components.JSqlList;

public class Leeftijdscategorie {
	
	private int id;
	private String naam;
	private int minleeftijd;
	private int maxleeftijd;
	
	/**
	 * @return the naam
	 */
	public String getNaam() {
		return naam;
	}
	
	/**
	 * @param naam the naam to set
	 */
	public void setNaam(String naam) {
		this.naam = naam;
	}

	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return the minleeftijd
	 */
	public int getMinleeftijd() {
		return minleeftijd;
	}

	/**
	 * @param minleeftijd the minleeftijd to set
	 */
	public void setMinleeftijd(int minleeftijd) {
		this.minleeftijd = minleeftijd;
	}

	/**
	 * @return the maxleeftijd
	 */
	public int getMaxleeftijd() {
		return maxleeftijd;
	}

	/**
	 * @param maxleeftijd the maxleeftijd to set
	 */
	public void setMaxleeftijd(int maxleeftijd) {
		this.maxleeftijd = maxleeftijd;
	}
	
	public static Leeftijdscategorie[] getAll(){
		String query = "select * from leeftijdscategorie order by minleeftijd asc";	
		return getCategorieen(query);
	}

	public static Leeftijdscategorie getCategorie(int id){
		
		String query = "select * from leeftijdscategorie where id = "+ id + " limit 1";	
		
		ResultSet r = Database.executeSelectQuery(query);
		Leeftijdscategorie thisCategorie = new Leeftijdscategorie();
	    try {
	        while (r.next()) {
	        	thisCategorie.setId(r.getInt("id"));
	        	thisCategorie.setNaam(r.getString("naam"));
	        	thisCategorie.setMinleeftijd(r.getInt("minleeftijd"));
	            thisCategorie.setMaxleeftijd(r.getInt("maxleeftijd"));
	        }
	    } catch(SQLException e) {
	        System.out.println("Leeftijdscategorie: getAllCategorieen: " + e.toString());
	        System.out.println(e.getMessage() + "\n" + e.getSQLState() + "\n" + e.getErrorCode());
	    }
	    return thisCategorie;

	}
	
  private static Leeftijdscategorie[] getCategorieen(String query) {
	
    ResultSet r = Database.executeSelectQuery(query);
    //sla straks de categoriegegevens op in een arraylist
    ArrayList<Leeftijdscategorie> leeftijdscategorie = new ArrayList<Leeftijdscategorie>();
    // haal de gegevens nu per categorie op en stop ze in een leeftijdscategorie object
    try {
      while (r.next()) {
    	Leeftijdscategorie value = new Leeftijdscategorie();
    	
    	value.setId(r.getInt("id"));
        value.setNaam(r.getString("naam"));
        value.setMinleeftijd(r.getInt("minleeftijd"));
        value.setMaxleeftijd(r.getInt("maxleeftijd"));

        //nu gaan de gegevens naar de arraylist
        leeftijdscategorie.add(value);
      }
    } catch (SQLException e) {
      System.out.println("Leeftijdscategorie: getAllCategorieen: " + e.toString());
      System.out.println(e.getMessage() + "\n" + e.getSQLState() + "\n" + e.getErrorCode());
    }
    if(leeftijdscategorie.size() == 0)
      System.out.println("Leeftijdscategorie: getAllCategorieen: " + "geen categorieenin de database (" + query + ")");
      
    //nu je weet hoeveel categorieen er gevonden zijn kun je ze in een array stoppen
    Leeftijdscategorie[] array = new Leeftijdscategorie[leeftijdscategorie.size()];
    for(int i = 0; i<leeftijdscategorie.size() ; i++)
      array[i] = leeftijdscategorie.get(i);
    return array;
  }

  @Override
  //print de speelgoedgegevens als tabel
  public String toString() {
	  
    String spaces = getNaam();
    
    if(getMinleeftijd() > 0 && getMaxleeftijd() > 0){
    	spaces += " (Vanaf "+Integer.toString(getMinleeftijd())+" jaar tot "+Integer.toString(getMaxleeftijd())+" jaar)";
    } else if(getMinleeftijd() > 0 && getMaxleeftijd() == 0) {
    	spaces += " (Vanaf "+Integer.toString(getMinleeftijd())+" jaar)";
    } else if(getMinleeftijd() == 0 && getMaxleeftijd() > 0){
    	spaces += " (Tot "+Integer.toString(getMaxleeftijd())+" jaar)";
    } else {
    	spaces += " (Alle leeftijden)";
    }
    
    String output = JSqlList.setSpaces(spaces, 40);
    
    return output;
  }
  
  //Equality override
  public boolean equals(Leeftijdscategorie other) {
	  if(this.getId() == other.getId()){
		  return true;
	  }
	  return false;
  }
	  
}
